const express = require('express');
const {authMiddleware} = require('../middlewares/authMiddleware');
// 引入 multer 用于文件上传
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const sendResponse = require('../utils/response');

const router = express.Router();

// 配置存储路径和文件名（避免重复）
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    // 存储目录, 根目录/public/uploads
    const uploadDir = path.join( path.dirname(__dirname), 'public', 'uploads');
    fs.promises.mkdir(uploadDir, { recursive: true }).catch(console.error);
    cb(null, uploadDir); // 存储目录
  },
  filename: (req, file, cb) => {
    const ext = path.extname(file.originalname);
    const uniqueName = Date.now() + '-' + Math.round(Math.random() * 1e9) + ext;
    cb(null, uniqueName); // 生成唯一文件名（时间戳+随机数）
  }
});

// 文件过滤（仅允许图片类型）
const fileFilter = (req, file, cb) => {
  const allowedTypes = ['image/jpeg', 'image/png', 'image/jpg', 'image/gif'];
  if (allowedTypes.includes(file.mimetype)) {
    cb(null, true);
  } else {
    cb(new Error('仅支持 JPG/PNG/GIF 格式'), false);
  }
};

// 初始化 Multer
const upload = multer({
  storage: storage,
  limits: { fileSize: 5 * 1024 * 1024 }, // 限制文件大小（5MB）
  fileFilter: fileFilter
});

// 文件上传
router.post('/upload', upload.single('file'), (req, res) => {
  if (!req.file) {
    return res.status(400).json({ code: 400, msg: '未选择文件' });
  }
  console.log("----上传文件成功----");
  // 当前项目的地址和端口
  // TODO 上线需要测试地址的完整路径
  const baseUrl = `http://${req.headers.host}`;
  // 返回文件访问路径（需配置静态资源目录）
  const fileUrl = `${baseUrl}/uploads/${req.file.filename}`;
  return sendResponse(res, { message: '上传成功', data: { url: fileUrl } })
});

module.exports = router;